package com.situ.struts.interceptor;

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionProxy;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.situ.struts.entity.Admin;

public class LoginInterceptor extends AbstractInterceptor{

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		//如果已经登录，放行（访问下一个拦截器或者是Action）
		//如果没有登录：转发到登录界面
		//特殊情况处理：拿到当前执行的方法名：判断只有当前方法名不是login才去验证
		
		//获得ActionContext对象
		ActionContext actionContext = invocation.getInvocationContext();
		//获得Action代理类
		ActionProxy proxy = invocation.getProxy();
		//获得当前执行的方法名
		String methodName = proxy.getMethod();
		//特殊情况判断
		if (!"login".equalsIgnoreCase(methodName)) {
			Map<String, Object> sessionMap = actionContext.getSession();
			Admin admin = (Admin) sessionMap.get("admin");
			if (admin == null) {
				return "loginFail";
			}
		}
		//访问下一个拦截器或者Action
		return invocation.invoke();
	}

}
